a11y: Implement find_cell_info() using qdata lookup
authorBenjamin Otte <otte@redhat.com>
Fri, 11 Nov 2011 19:11:50 +0000 (20:11 +0100)
committerBenjamin Otte <otte@redhat.com>
Wed, 16 Nov 2011 03:39:23 +0000 (04:39 +0100)
That should be orders of magnitude faster then iterating over a hash
table.

gtk/a11y/gtktreeviewaccessible.c

index cd0390bb06c7f735e664bc46799abc53cd5e3843..c27b5eee3d455e367d41c269c87ff17d050eb530 100644 (file)
@@ -3605,16 +3605,14 @@ find_cell_info (GtkTreeViewAccessible *accessible,
                 gboolean               live_only)
 {
   GtkTreeViewAccessibleCellInfo *cell_info;
-  GHashTableIter iter;
 
-  /* Clean GtkTreeViewAccessibleCellInfo data */
-  g_hash_table_iter_init (&iter, accessible->cell_info_by_index);
-  while (g_hash_table_iter_next (&iter, NULL, (gpointer *) &cell_info))
-    {
-      if (cell_info->cell == cell && (!live_only || cell_info->in_use))
-        return cell_info;
-    }
-  return NULL;
+  cell_info = g_object_get_qdata (G_OBJECT (cell),
+                                  gtk_tree_view_accessible_get_data_quark ());
+  
+  if (live_only && cell_info && !cell_info->in_use)
+    cell_info = NULL;
+
+  return cell_info;
 }
 
 static AtkObject *